package cliente.conta;

import java.awt.event.ActionEvent;
import java.beans.PropertyChangeListener;
import java.util.Date;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JOptionPane;

import mensagens.EnviaDados;
import mensagens.ManterItemConta;
import mensagens.ManterServico;
import mensagens.Mensagem;

public class ExecutaCadastrarItemConta extends AbstractAction {

	/**
	 * 
	 */
	private static final long serialVersionUID = 7962261747447354650L;
	
	private CadastraItemConta cdi;

	public ExecutaCadastrarItemConta(CadastraItemConta c) {
		setCdi(c);
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getActionCommand().equals("fecha")){
			getCdi().getTfCadastraItemConta().dispose();
		} else if(e.getActionCommand().equals("inserir")){
			// Primeiro busca os dados do serviço a incluir
			ManterServico ms = new ManterServico(2);
			ms.setServicoBusca((String)getCdi().getcServ().getSelectedItem());
			ms = (ManterServico)EnviaDados.enviarMensagem(ms);
			
			// Cria um novo ManterItemConta
			ManterItemConta mic = new ManterItemConta(1);
			
			// Seta o apartamento da reserva
			try{
				mic.setNumApto(Integer.parseInt(getCdi().gettNumAp().getText().trim()));
			} catch (NumberFormatException nfe){
				JOptionPane.showMessageDialog(getCdi().getTfCadastraItemConta(),"O número do apartamento não é um número válido!", "Erro!",JOptionPane.ERROR_MESSAGE);
				return;
			}
			// Seta o serviço do mic
			mic.getI().setServico(ms.getServico());
			
			// Seta o Serviço a incluir
			// mic.getI().setItemId(ms.getServico().getServiceId());
			
			// Seta o item da conta com a data/hora atuais
			mic.getI().setData(new Date());
			
			// Seta a quantidade do item
			mic.getI().setQuantidade(Integer.parseInt(getCdi().getTqtde().getText().trim()));
			
			// Seta o valor do item
			mic.getI().setValor(ms.getServico().getPreco() * (double)mic.getI().getQuantidade());
			
			// System.out.println("Valor total: "+mic.getI().getValor());
			
			// Envia os dados a serem incluidos
			mic = (ManterItemConta)EnviaDados.enviarMensagem(mic);
			
			// Espera confirmação
			// TODO
			//int i = JOptionPane.showConfirmDialog(getCdi().getTfCadastraItemConta(), "Confirma a despesa em nome de "+mic.getNomeHospede()+"?","Confirmação!", JOptionPane.OK_CANCEL_OPTION);
			
			// Se foi confirmado:
			//if(i == 0){
				if(mic.getSubTipo() == 11){
					// System.out.println("Despesa incluida com sucesso!");
					JOptionPane.showMessageDialog(getCdi().getTfCadastraItemConta(),"Despesa incluída com sucesso!", "Info!",JOptionPane.INFORMATION_MESSAGE);
					getCdi().getTfCadastraItemConta().dispose();
				} else if(mic.getSubTipo() == 12){
					JOptionPane.showMessageDialog(getCdi().getTfCadastraItemConta(),"Este apartamento não está ocupado! Verificar se já efetuou checkin", "Erro!",JOptionPane.ERROR_MESSAGE);
				} else if(mic.getSubTipo() == 13){
					JOptionPane.showMessageDialog(getCdi().getTfCadastraItemConta(),"O número do apartamento não existe!", "Erro!",JOptionPane.ERROR_MESSAGE);
				}
		//	}
		}
	}

	public void setCdi(CadastraItemConta cdi) {
		this.cdi = cdi;
	}

	public CadastraItemConta getCdi() {
		return cdi;
	}

}
